package com.youlu.campus.admin.community.service;

import com.youlu.campus.admin.community.dto.ActivityOnTopRequest;
import com.youlu.campus.admin.community.dto.ActivityQueryRequest;
import com.youlu.campus.admin.community.dto.ActivityRankQueryVo;
import com.youlu.campus.admin.community.dto.ActivityResponse;
import com.youlu.campus.admin.community.dto.ActivitySignQueryRequest;
import com.youlu.campus.entity.ActivityInfo;
import com.youlu.campus.entity.UserActivityFootPrint;
import com.youlu.campus.entity.UserParticipateActivityInfo;
import com.youlu.campus.entity.VO.req.ActivityFootPrintQueryVO;
import com.youlu.campus.entity.VO.req.ActivityOrgReq;
import com.youlu.campus.entity.VO.req.UserDataPermissionUpdateVO;
import com.youlu.campus.entity.system.UserDataPermission;
import com.yuelin.infrastructure.quantum.common.QResult;
import org.springframework.data.domain.Page;

import java.util.HashMap;
import java.util.List;

/**
 * 活动接口
 *
 * @author: zhuhuaiqi
 * @date: 2020/12/11 17:17
 */
public interface ActivityService {

    /**
     * 查询生效的活动
     *
     * @return
     */
    List<ActivityInfo> findActiveActivities();


    /**
     * 通过ID修改RandomInitJoinNum字段
     *
     * @param id
     * @param randomInitJoinNum
     */
    public void updateRandomInitJoinNum(String id, long randomInitJoinNum);

    /**
     * 创建活动
     *
     * @param request
     * @return
     */
    boolean createActivity(ActivityInfo request);

    /**
     * 修改活动
     *
     * @param request
     * @return
     */
    boolean updateActivity(ActivityInfo request);

    /**
     * 删除活动
     *
     * @param id
     * @return
     */
    boolean deleteActivity(String id);

    /**
     * 活动列表
     *
     * @param request
     * @return
     */
    Page<ActivityResponse> activityList(ActivityQueryRequest request);

    /**
     * 活动置顶
     *
     * @param request
     * @return
     */
    boolean activityOnTop(ActivityOnTopRequest request);

    /**
     * 活动信息查询
     *
     * @param id
     * @return
     */
    ActivityInfo query(String id);

    /**
     * 活动报名用户列表
     *
     * @param request
     * @return
     */
    Page<UserParticipateActivityInfo> signUpList(ActivitySignQueryRequest request);

    /**
     * 用户足迹列表
     *
     * @param req
     * @return
     */
    Page<UserActivityFootPrint> footPrintList(ActivityFootPrintQueryVO req);

    /**
     * 用户足迹图片列表
     *
     * @param req
     * @return
     */
    Page<UserActivityFootPrint> imageListPrint(ActivityFootPrintQueryVO req);


    void updateActivityOrg(ActivityOrgReq activityOrgReq);

    /**
     * 修改报名信息
     *
     * @param req
     * @return
     */
    boolean updateUserInfo(UserParticipateActivityInfo req);

    /**
     * 拉黑入黑名单
     *
     * @param req
     * @return
     */
    boolean blackList(UserParticipateActivityInfo req, String optUser);

    /**
     * 获取用户报名信息
     *
     * @param id
     * @return
     */
    UserParticipateActivityInfo findOnesignUpUser(String id);

    /**
     * 生成微信短链接
     *
     * @param id
     * @return
     */
    String generateShortUrl(String id, String urlType);

    /**
     * 活动列表新接口
     *
     * @param request
     * @return
     */
    Page<ActivityResponse> newActivityList(ActivityQueryRequest request);


    void setJoinedCount(String id);

    boolean updateUserPermission(UserDataPermissionUpdateVO request);

    /**
     * 获取活动数据权限详情
     *
     * @param id
     * @return
     */
    UserDataPermission getUserPermission(String id);

    /**
     * 获取排行榜值
     *
     * @param userId
     * @param activityId
     * @return
     */
    HashMap<String, Double> getRankInfo(String userId, String activityId);

    /**
     * 修改排行榜信息
     *
     * @param userId
     * @param activityId
     * @param q
     * @return
     */
    boolean updateRankInfo(String userId, String activityId, Double q);

    /**
     * 转移活动创建者
     *
     * @param activityId
     * @param newCreatorId
     * @return
     */
    QResult transferCreator(String activityId, String newCreatorId);
}
